<!DOCTYPE html>
<head>
<title>CSS Custom Properties: Using CSS-wide keywords</title>
<link rel="help" href="https://drafts.csswg.org/css-variables/#defining-variables">
<meta name="assert" content="The CSS-wide keywords can be used in custom properties, with the same meaning as in any another property." />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
  body {
    --is-initial: initial;

    --should-not-inherit: tomato;
    --should-inherit: lightgreen;

    --registered-inherits-should-not-inherit: tomato;
    --registered-should-not-inherit: tomato;
    --registered-inherits-should-inherit: lightgreen;
    --registered-should-inherit: lightgreen;
    --registered-should-revert: tomato;
    --registered-inherits-should-revert: tomato;
  }
  @property --registered-inherits-should-not-inherit {
    syntax: '<color>';
    initial-value: lightgreen;
    inherits: true;
  }
  @property --registered-should-not-inherit {
    syntax: '<color>';
    initial-value: lightgreen;
    inherits: false;
  }
  @property --registered-inherits-should-inherit {
    syntax: '<color>';
    initial-value: tomato;
    inherits: true;
  }
  @property --registered-should-inherit {
    syntax: '<color>';
    initial-value: tomato;
    inherits: false;
  }
  @property --registered-should-revert {
    syntax: '<color>';
    initial-value: orange;
    inherits: false;
  }
  @property --registered-inherits-should-revert {
    syntax: '<color>';
    initial-value: orange;
    inherits: true;
  }
</style>

<!-- Tests for values of unregistered custom properties -->
<div class="test" style="
  background: var(--should-not-inherit, lightgreen);
  --should-not-inherit: initial;
">
  `initial` as a value for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: inherit;
">
  `inherit` as a value for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: unset;
">
  `unset` as a value for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: revert;
">
  `revert` as a value for an unregistered custom property
</div>

<style>
  #regular-revert-layer {
    @layer {
      --should-not-inherit: lightgreen;
    }
    @layer {
      --should-not-inherit: revert-layer;
    }
  }
</style>
<div class="test" id="regular-revert-layer" style="
  background: var(--should-not-inherit);
">
  `revert-layer` as a value for an unregistered custom property
</div>


<!-- Tests for values of registered custom properties -->

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: initial;
">
  `initial` as a value for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-not-inherit);
  --registered-inherits-should-not-inherit: initial;
">
  `initial` as a value for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-inherit);
  --registered-should-inherit: inherit;
">
  `inherit` as a value for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: inherit;
">
  `inherit` as a value for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: unset;
">
  `unset` as a value for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: unset;
">
  `unset` as a value for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: revert;
">
  `revert` as a value for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: revert;
">
  `revert` as a value for an inheriting registered custom property
</div>

<style>
  #registered-revert-layer {
    @layer {
      --registered-should-revert: lightgreen;
    }
    @layer {
      --registered-should-revert: revert-layer;
    }
  }
</style>
<div class="test" id="registered-revert-layer" style="
  background: var(--registered-should-revert);
">
  `revert-layer` as a value for a non-inheriting registered custom property
</div>

<style>
  #registered-revert-layer-inherits {
    @layer {
      --registered-inherits-should-revert: lightgreen;
    }
    @layer {
      --registered-inherits-should-revert: revert-layer;
    }
  }
</style>
<div class="test" id="registered-revert-layer-inherits" style="
  background: var(--registered-inherits-should-revert);
">
  `revert-layer` as a value for an inheriting registered custom property
</div>


<!-- Tests for `var()` fallbacks of unregistered custom properties -->

<div class="test" style="
  background: var(--should-not-inherit, lightgreen);
  --should-not-inherit: var(--is-initial, initial);
">
  `initial` as a `var()` fallback for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: var(--is-initial, inherit);
">
  `inherit` as a `var()` fallback for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: var(--is-initial, unset);
">
  `unset` as a `var()` fallback for an unregistered custom property
</div>

<div class="test" style="
  background: var(--should-inherit, tomato);
  --should-inherit: var(--is-initial, unset);
">
  `revert` as a `var()` fallback for an unregistered custom property
</div>

<style>
  #regular-fallback-revert-layer {
    @layer {
      --should-not-inherit: lightgreen;
    }
    @layer {
      --should-not-inherit: var(--is-initial, revert-layer);
    }
  }
</style>
<div class="test" id="regular-fallback-revert-layer" style="
  background: var(--should-not-inherit);
">
  `revert-layer` as a `var()` fallback for an unregistered custom property
</div>


<!-- Tests for `var()` fallbacks of registered custom properties -->

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: var(--is-initial, initial);
">
  `initial` as a `var()` fallback for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-not-inherit);
  --registered-inherits-should-not-inherit: var(--is-initial, initial);
">
  `initial` as a `var()` fallback for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-inherit);
  --registered-should-inherit: var(--is-initial, inherit);
">
  `inherit` as a `var()` fallback for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: var(--is-initial, inherit);
">
  `inherit` as a `var()` fallback for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: var(--is-initial, unset);
">
  `unset` as a `var()` fallback for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: var(--is-initial, unset);
">
  `unset` as a `var()` fallback for an inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-should-not-inherit);
  --registered-should-not-inherit: var(--is-initial, revert);
">
  `revert` as a `var()` fallback for a non-inheriting registered custom property
</div>

<div class="test" style="
  background: var(--registered-inherits-should-inherit);
  --registered-inherits-should-inherit: var(--is-initial, revert);
">
  `revert` as a `var()` fallback for an inheriting registered custom property
</div>

<style>
  #registered-fallback-revert-layer {
    @layer {
      --registered-should-revert: lightgreen;
    }
    @layer {
      --registered-should-revert: var(--is-initial, revert-layer);
    }
  }
</style>
<div class="test" id="registered-fallback-revert-layer" style="
  background: var(--registered-should-revert);
">
  `revert-layer` as a `var()` fallback for a non-inheriting registered custom property
</div>

<style>
  #registered-fallback-revert-layer-inherits {
    @layer {
      --registered-inherits-should-revert: lightgreen;
    }
    @layer {
      --registered-inherits-should-revert: var(--is-initial, revert-layer);
    }
  }
</style>
<div class="test" id="registered-fallback-revert-layer-inherits" style="
  background: var(--registered-inherits-should-revert);
">
  `revert-layer` as a `var()` fallback for an inheriting registered custom property
</div>

<pre id="out"></pre>
<script>
  [...document.querySelectorAll('.test')].map(el => test(() => assert_equals(getComputedStyle(el).getPropertyValue('background-color'), 'rgb(144, 238, 144)'), el.textContent.trim()));
</script>
